import { reqGoodsInfo ,reqAddOrUpdateShopCart} from "@/api"
// 封装零时游客身份模块---生成随机字符串
import {getUUID} from '@/utils/uuid_token'
const state={
    goodInfo:{},
    // 游客临时身份
    uuid_token:getUUID()
}
const actions={
    // 获取产品信息action
    async getGoodInfo({commit},skuid){
        let result = await reqGoodsInfo(skuid)
        if(result.code == 200){
            commit('GETGOODINFO',result.data)
        }
    },

    // 将产品添加到购物车中
    async addOrUpdateShopCart({commit},{skuId,skuNum}){
        /* 加入购物车返回的结果
            加入购物车以后(发请求)，前台将参数带给服务器
            服务器写入数据成功，并没有返回其它的数据，只是返回code=200，代表这一次的操作成功
            因为服务器没有返回其余的数据，因此不需要三连环存储数据
         */
        let result = await reqAddOrUpdateShopCart(skuId,skuNum);
        /* 
            当前的这个函数，如果执行返回promise
                return 非空字符串 代表成功
                return promise.reject() 代表失败
        */
        if(result.code==200){
            //代表加入购物车成功
            return 'ok'
        }else{
            //代表加入购物车失败
            return Promise.reject(new Error('faile'))
        }
        
    }
}
const mutations={
    GETGOODINFO(state,goodInfo){
        state.goodInfo=goodInfo
    }
}

// 简化数据 
const getters={
    // 导航路径信息
    categoryView(state){
        // 当前计算出来的属性值至少返回一个空对象，如果不加{}，会出现假报错
        return state.goodInfo.categoryView || {};
    },

    // 产品主要信息
    skuInfo(state){
        return state.goodInfo.skuInfo || {}
    },

    // 产品的售卖属性
    spuSaleAttrList(state){
        return state.goodInfo.spuSaleAttrList || []
    }
}

export default{
    state,
    mutations,
    actions,
    getters
}